
using Nop.Core;
using Nop.Core.Domain.Common;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.XJ;
using System.Collections.Generic;

namespace Nop.Services.XJ
{
	/// <summary>
	/// XJEquipmentCategory service
	/// </summary>
	public partial interface IXJEquipmentCategoryService
	{
		/// <summary>
		/// Gets all XJEquipmentCategorys
		/// </summary>
		/// <returns>XJEquipmentCategory</returns>
		IList<XJEquipmentCategory> GetAllXJEquipmentCategorys();

		IList<XJEquipmentCategoryTemp> GetXJEquipmentCategorys(bool isConsumables = true);

		IPagedList<XJEquipmentCategory> GetAllCategorys(int categoryMainId = 0, int pId = -1, string categoryName = "", bool? isConsumables = null, bool showHidden = true, int pageIndex = 0, int pageSize = int.MaxValue);

		IList<XJEquipmentCategory> GetAllCategoriesByParentCategoryId(int categoryMainId = 0, int parentCategoryId = 0, bool showHidden = true, bool includeAllLevels = false);

		IList<TreeItem> GetCategoryTree(int xJEquipmentCategoryId = 0, int placeId = 0, bool? isConsumables = null);

		IList<XJEquipmentCategory> GetAllCategories(int xJEquipmentCategoryId);

		IList<XJEquipmentCategory> GetAllCategories(XJEquipmentCategory category);

		/// <summary>
		/// Gets a XJEquipmentCategory 
		/// </summary>
		/// <param name="xJEquipmentCategoryId">XJEquipmentCategory identifier</param>
		/// <returns>XJEquipmentCategory</returns>
		XJEquipmentCategory GetXJEquipmentCategoryById(int xJEquipmentCategoryId);

		string GetNameById(int id);

		/// <summary>
		/// Inserts a XJEquipmentCategory
		/// </summary>
		/// <param name="xJEquipmentCategory">XJEquipmentCategory</param>
		void InsertXJEquipmentCategory(XJEquipmentCategory xJEquipmentCategory);

		/// <summary>
		/// Updates the XJEquipmentCategory
		/// </summary>
		/// <param name="xJEquipmentCategory">XJEquipmentCategory</param>
		void UpdateXJEquipmentCategory(XJEquipmentCategory xJEquipmentCategory);

		/// <summary>
		/// Deletes a XJEquipmentCategory
		/// </summary>
		/// <param name="XJEquipmentCategory">XJEquipmentCategory</param>
		void DeleteXJEquipmentCategory(XJEquipmentCategory xJEquipmentCategory);

		void DeleteCategory(XJEquipmentCategory category);

		ResultModel SyncCategoryPlaces(int categoryId, Customer customer);
	}
}

